package com.cotasul.tela;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;

import com.cotasul.bean.FormaPagamentoBean;
import com.cotasul.bean.FornecedorBean;
import com.cotasul.bean.UsuarioBean;
import com.cotasul.negocio.FormaPagamentoServico;
import com.cotasul.negocio.interfaces.IServicoGenerico;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;

@ManagedBean
@ViewScoped
public class FormaPagamentoTela extends TelaAbstrata {

	@ManagedProperty(value = "#{usuario}")
	private UsuarioBean usuario;

	private FormaPagamentoServico<FormaPagamentoBean> formaPagamentoServico;

	private FormaPagamentoBean forma;

	private String formaPagFiltro;

	private String metodoPagFiltro;

	private Map<String, String> params;

	private List<FormaPagamentoBean> listaFormas;

	private FacesMessage facesMsg;

	@ManagedProperty(value = "#{fornecedorBean}")
	private FornecedorBean fornecedor;

	public FormaPagamentoTela() {
		this.forma = new FormaPagamentoBean();
		this.formaPagamentoServico = new FormaPagamentoServico<FormaPagamentoBean>();
		facesMsg = null;
	}

	public void salvar() {
		try {

			forma.setFornecedor(new FornecedorBean(usuario));
			this.formaPagamentoServico.salvar(forma);
			this.forma = new FormaPagamentoBean();
			RequestContext.getCurrentInstance()
					.execute("dlgCadFormaPag.hide()");
			listaFormas = new ArrayList<FormaPagamentoBean>();
			facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, this
					.getServico().getValor("msg_header_sucesso"), this
					.getServico().getValor("msg_sucesso_registro_inclusao"));
		} catch (MySQLIntegrityConstraintViolationException e1) {

			facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, this
					.getServico().getValor("msg_header_erro"), this
					.getServico().getValor("msg_erro_constraint_violation"));

		} catch (Exception e2) {
			e2.printStackTrace();
		} finally {
			FacesContext.getCurrentInstance().addMessage(null, facesMsg);
		}
	}

	public void filtraFormas() {
		params = new HashMap<String, String>();
		if (!"".equals(metodoPagFiltro.trim())) {
			params.put("METODO", metodoPagFiltro);
		}
		if (!"".equals(formaPagFiltro.trim())) {
			params.put("FORMA", formaPagFiltro);
		}
		params.put("CODFORNE", fornecedor.getCodigo() + "");

		try {
			this.listaFormas = this.formaPagamentoServico.buscaFormas(params);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void alterar() {
		try {
			this.formaPagamentoServico.alterar(forma);
			facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, this
					.getServico().getValor("msg_header_sucesso"), this
					.getServico().getValor("msg_sucesso_registro_alteracao"));
			filtraFormas();
			RequestContext.getCurrentInstance()
					.execute("dlgEdiFormaPag.hide()");
			forma = new FormaPagamentoBean();
		} catch (Exception e1) {

			e1.printStackTrace();
			facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, this
					.getServico().getValor("msg_header_erro"), this
					.getServico().getValor("msg_erro_alterar"));
		} finally {
			FacesContext.getCurrentInstance().addMessage(null, facesMsg);
		}
	}

	public void excluir(FormaPagamentoBean forma) {
		try {
			this.formaPagamentoServico.excluir(forma);
			facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, this
					.getServico().getValor("msg_header_sucesso"), this
					.getServico().getValor("msg_sucesso_registro_delecao"));
			filtraFormas();

		} catch (Exception e1) {
			e1.printStackTrace();
			facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, this
					.getServico().getValor("msg_header_erro"), this
					.getServico().getValor("msg_erro_excluir"));
		} finally {
			FacesContext.getCurrentInstance().addMessage(null, facesMsg);
		}
	}

	@SuppressWarnings("rawtypes")
	@Override
	protected IServicoGenerico getServico() {

		return this.formaPagamentoServico;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}

	public FormaPagamentoServico<FormaPagamentoBean> getFormaPagamentoServico() {
		return formaPagamentoServico;
	}

	public void setFormaPagamentoServico(
			FormaPagamentoServico<FormaPagamentoBean> formaPagamentoServico) {
		this.formaPagamentoServico = formaPagamentoServico;
	}

	public FormaPagamentoBean getForma() {
		return forma;
	}

	public void setForma(FormaPagamentoBean forma) {
		this.forma = forma;
	}

	public String getFormaPagFiltro() {
		return formaPagFiltro;
	}

	public void setFormaPagFiltro(String formaPagFiltro) {
		this.formaPagFiltro = formaPagFiltro;
	}

	public String getMetodoPagFiltro() {
		return metodoPagFiltro;
	}

	public void setMetodoPagFiltro(String metodoPagFiltro) {
		this.metodoPagFiltro = metodoPagFiltro;
	}

	public Map<String, String> getParams() {
		return params;
	}

	public void setParams(Map<String, String> params) {
		this.params = params;
	}

	public List<FormaPagamentoBean> getListaFormas() {
		return listaFormas;
	}

	public void setListaFormas(List<FormaPagamentoBean> listaFormas) {
		this.listaFormas = listaFormas;
	}

	public FornecedorBean getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(FornecedorBean fornecedor) {
		this.fornecedor = fornecedor;
	}

}
